﻿// 决斗（.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//


/*
https://www.acwing.com/problem/content/6045/
https://www.luogu.com.cn/problem/P11231

今天是小 Q的生日，他得到了 n 张卡牌作为礼物。

这些卡牌属于火爆的“决斗怪兽”，其中，第 i 张卡代表一只攻击力为 ri
，防御力也为 ri 的怪兽。

一场游戏分为若干回合。

每回合，小 Q 会选择某只怪兽 i 以及另一只怪兽 j
（i≠j），并让怪兽 i 向怪兽 j 发起攻击。

此时，若怪兽 i 的攻击力小于等于怪兽 j 的防御力，则无事发生；
否则，怪兽 j 的防御被打破，怪兽 j 退出游戏不再参与到剩下的游戏中。

一只怪兽在整场游戏中至多只能发起一次攻击。

当未退出游戏的怪兽都已发起过攻击时，游戏结束。

小 Q 希望决定一组攻击顺序，使得在游戏结束时，未退出游戏的怪兽数量尽可能少。

输入格式
输入的第一行包含一个正整数 n，表示卡牌的个数。

输入的第二行包含 n 个正整数，其中第 i 个正整数表示第 i 个怪兽的攻击力及防御力 ri。

输出格式
输出一行包含一个整数表示游戏结束时未退出游戏的怪兽数量的最小值。

数据范围
对于所有测试数据，保证：1≤n≤105，1≤ri≤105。

特殊性质 A：保证每个 ri 在可能的值域中独立均匀随机生成。

输入样例1：
5
1 2 3 1 2
输出样例1：
2
样例1解释
其中一种最优方案为：第一回合让第 2 只怪兽向第 1 只怪兽发起攻击，第二回合让第 5
 只怪兽向第 4 只怪兽发起攻击，第三回合让第 3只怪兽向第 5只怪兽发起攻击。

此时没有退出游戏的怪兽都进行过攻击，游戏结束。可以证明没有更优的攻击顺序。

输入样例2：
10
136 136 136 2417 136 136 2417 136 136 136
输出样例2：
8
*/



#include <iostream>
#include <algorithm>

using namespace std;

const int N = 100010;

int a[N];
int n;

int bin_search(int l, int r, int x) {
	while (l < r) {
		int mid = (l + r + 1) >> 1;
		if (a[mid] <= x) l = mid; else r = mid - 1;
	}
	return l;
}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}
	sort(a, a + n);
	int cnt = 0; int l = 1;
	for (int i = 0; i < n; i++) {
		if (l >= n || i==l) break;
		int curr = a[i];
		int r = n-1;
		int idx = bin_search(l,r,curr);
		if (a[idx] > curr ) {
			l = idx + 1; cnt++;
		}
		else if ((idx + 1 < n) && a[idx + 1] > curr) {
			l = idx + 2; cnt++;
		}
	}

	cout << n-cnt << endl;
	 
	return 0;
}

 